<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>表白墙</title>
</head>
<body>
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        .container {
            width: 600px;
            margin: 0 auto;
        }
        h1 {
            text-align: center;
            padding: 20px 0;
        }
        p {
            font-size: 12px;
            color: #666;
            padding: 10px 0;
            text-align: center;
        }
        .row {
            display: flex;
            height: 40px;
            align-items: center;
            justify-content: center;
        }
        .row span {
            width: 100px;
        }
 
        .row .edit {
            width: 200px;
            height: 36px;
        }
 
        .row .submit {
            width: 300px;
            height: 40px;
            color: #fff;
            background-color: orange;
            /* 去掉边框 */
            border: none;
        }
 
        .row .submit:active {
            background-color: green;
        }
    </style>
    <div class="container">
        <h1>表白墙</h1>
        <p>输入后点击提交，将会把消息显示在墙上</p>
        <div class="row">
            <span>谁：</span>
            <input type="text" class="edit">
        </div>
        <div class="row">
            <span>对谁：</span>
            <input type="text" class="edit">
        </div>
        <div class="row">
            <span>说什么：</span>
            <input type="text" class="edit">
        </div>
        <div class="row">
            <input type="button" value="提交" class="submit">
        </div>
    </div>
 
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script>
        let submitButton = document.querySelector('.submit');
        submitButton.onclick = function() {
            // 1. 获取到输入框里面的内容
            let edits = document.querySelectorAll('.edit');
            let from = edits[0].value;
            let to = edits[1].value;
            let message = edits[2].value;
            console.log(from + ", " + to + ", " + message);
            if (from == '' || to == '' || message == '') {
                return;
            }
            // 2. 根据输入框的内容，构造 HTML 元素，添加到页面中
            //      接下来的每个消息，都使用 div.row 来去表示
            let row = document.createElement('div');
            row.className = 'row';
            row.innerHTML = from + '对' + to + '说：' + message;
 
            let container = document.querySelector('.container');
            container.appendChild(row);
 
            // 3. 把上次输入的内容清空
            for (i = 0; i < 3; i++) {
                edits[i].value = '';
            }
 
            // 4. 把当前拿到的消息给发到服务器这边
            //    在 JSON 中，key是要带引号的
            //    但是在 JS 中，可以带，也可以不带，带或不带，都是字符串类型，但如果key中有空格，就必须带引号
            let body = {
                from: from,
                to: to,
                message: message
            };
            $.ajax({
                url:"message",
                type:"post",
                contentType:"application/json;charset=utf8",
                // 此处的 JSON.stringify 相当于 Java objectMapper.writeValue
                data: JSON.stringify(body),
                success: function(body) {
                    alert("消息提交成功！");
                },
                error: function() {
                    alert("消息提交失败!");
                }
            });
        }
 
        // 原有的逻辑不变，下面重写来写
        // 1. 在页面加载的时候，去从服务器获取消息列表，并显示在网页上
        function load () {
            $.ajax({
                type: "get",
                url: "message",
                success: function(body) {
                    // 此处得到的响应 body 其实已经被 jquery 给转成一个对象数组了，就可以直接进行操作
                    // 但是这里的自动转换有一个前提，服务器响应的 header 中的 Content-Type 是 application/json
                    // 如果客户端没有自动转，也可以通过 JSON.parse() 这个函数来手动转
                    let container = document.querySelector('.container');
                    // 遍历，依次取数组中的元素
                    for (let message of body) {
                        // 遍历每个元素，针对每个元素创建一个 div 标签，并给这个标签加载到页面中
                        let row = document.createElement('div');
                        row.className = 'row';
                        row.innerHTML = message.from + '对' + message.to + '说：' + message.message;
                        container.appendChild(row);
                    }
                }
            })
        }
        // 函数调用
        load();
    </script>
</body>
</html>